package org.trinity.netdisk.mapper;

import org.apache.ibatis.annotations.Param;
import org.trinity.netdisk.entity.File;
import org.trinity.netdisk.entity.FileType;
import org.trinity.netdisk.entity.UserFile;

import java.util.LinkedList;
import java.util.List;

public interface FileMapper {
    LinkedList<UserFile> selectByUserIdAndDirId(@Param("user_id") Long userId, @Param("dir_id") Long dirId);
    List<FileType> selectAllFileType();
    Long selectUserFileUsage(@Param("user_id") Long userId);
    List<File> selectDirById(@Param("file_id") Long fileId);
    int createDir(UserFile userFile);
    List<UserFile> selectByNameUserIdAndParentId(UserFile userFile);
    int deleteFile(UserFile userFile);
    int deleteFileFromRecycleBin(UserFile userFile);
    int recoverFromRecycleBin(UserFile userFile);
    int deleteFileFromRecycleBinByUserFileId(@Param("id") Long userFileId);
    LinkedList<UserFile> selectFromRecycleBinByUserIdAndDirId(@Param("user_id") Long userId, @Param("dir_id") Long dirId);
    File selectFileByMd5(String md5);
    Integer insertUserFile(UserFile userFile);
    Integer insertFile(File file);
    File selectFileByFileId(Long fileId);
    UserFile selectUserFileByIdAndUserId(@Param("user_id") Long userId, @Param("user_file_id") Long userFileId);
    int renameUserFileByIdAndUserId(@Param("user_id") Long userId, @Param("user_file_id") Long userFileId, @Param("name") String name);
    int moveUserFileByIdAndUserIdAndDirId(@Param("user_id")Long userId, @Param("user_file_id") Long userFileId, @Param("to") Long dirId);
    LinkedList<UserFile> selectByUserIdAndFilename(@Param("user_id") Long userId, @Param("name") String filename);
    int copyUserFileByFileIdAndUserId(@Param("user_file_id")Long userFileId, @Param("user_id")Long userId, @Param("target")Long target);
}
